package com.spark.msb.scala

/**
 * Created by lhy on 2020/7/16 15:03
 * Description: 
 */
/*
    object 是单例的，类似于static 不允许new 只能在class中直接使用
    object和class 同名：伴生关系 —-> 若存在同名属性，则调用class里的
 */
object Lesson00_Object_Class {
    private val scala:TestScala = new TestScala
    //    private val zs = new TestScala("")
    var name = "Tom"

    println("Hello Scala up !")

    def main(args: Array[String]): Unit = {
        println("Hello Scala!")
        scala.printMes()
        //        zs.printMes()
    }

    println("Hello Scala down !")
}

/*  class
    1. 不在函数体里的代码是默认构造中的
    2. 自定义构造
    3. 类名构造器中的参数是类的成员属性，且默认是val类型，private修饰
    4. 只有在类名构造器中的参数可以设置成var,其他方法函数中的参数都是val类型的,且不允许设置成var类型；∵要满足纯函数
 */
class TestScala(){
    var name = "lisi"
    def this(name: String){
        // 必须调用默认构造
        this()
        this.name = name
    }

    //    def ss(var x:Int) :Unit = {  var 也是报错的
    ////    x = 3     --> 报错：Reassignment to val
    //    println(x)
    //}
    /*
    var:变量
    val:常量
     */
    var a:Int = 3
    a = 9
    val b = 8
    //    b = 7     --> 报错
    println(s"TestScala2 up $a")

    def printMes(): Unit = {
        println(s"Hello Scala on TestScala2! $name")
        println(Lesson00_Object_Class.name)
        println(name)
    }

    println(s"TestScala down ${a + 4}")
}
